package com.zpark.merchant.app.feign;

import com.zpark.jushanpay.common.domain.BusinessException;
import com.zpark.jushanpay.common.domain.RestResponse;
import com.zpark.merchant.app.feign.impl.TransactionPayChannelFeignImpl;
import com.zpark.transaction.api.dto.PayChannelDTO;
import com.zpark.transaction.api.dto.PayChannelParamDTO;
import com.zpark.transaction.api.dto.PlatformChannelDTO;
import com.zpark.transaction.api.dto.QRCodeDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * Feign远程调用
 */
@FeignClient(value = "${juspay.server.tran_name}",
        fallback = TransactionPayChannelFeignImpl.class)
public interface ITransactionPayChannelFeign {

    /**
     * 查询所有平台服务类型数据
     * @return
     */
    @GetMapping("${base_path.tran_serv}/find_platform_channel_all")
    RestResponse<List<PlatformChannelDTO>> findPlatformChannelAll();

    /**
     * 应用绑定平台服务类型
     */
    /**
     * 应用绑定平台服务类型
     * @param appId 应用的appId
     * @param platformChannelCode 平台服务类型编码
     * @return
     */
    @PostMapping("${base_path.tran_serv}/bind_platform_channel_app/{appId}")
    RestResponse<Void> bindPlatformChannelForApp(
            @PathVariable("appId") String appId,
            @RequestParam("platformChannelCode") String platformChannelCode);

    /**
     * 查询应用与平台支付渠道类型是否绑定
     * @param appId 应用ID
     * @param platformChannelCode 平台支付渠道类型编码
     * @return
     */
    @PostMapping("${base_path.tran_serv}/is_bind_app_platform_channel/{appId}")
    RestResponse<Integer> findAppPlatformChannelByAppIdChannelCode(
            @PathVariable("appId") String appId,
            @RequestParam("platformChannelCode") String platformChannelCode);

    /**
     * 通过平台服务类型产原始支付渠道数据
     */
    @PostMapping("${base_path.tran_serv}/find_pay_channel_by_platform_channel")
    RestResponse<List<PayChannelDTO>> findPayChannelByPlatformChannel(
            @RequestParam("platformChannelCode") String platformChannelCode);

    /**
     * 保存支付渠道参数配置
     */
    @PostMapping("${base_path.tran_serv}/save_pay_channel_param")
    RestResponse<Void> addPayChannelParam(@RequestBody PayChannelParamDTO dto);

    /**
     * 根据应用的appId和平台服务类型编码查询原始支付渠道参数配置数据
     * @param appId 应用的appId
     * @param platformChannelCode 平台服务类型编码
     * @return
     */
    @PostMapping("${base_path.tran_serv}/find_pay_channel_param_by_app_and_platform/{appId}")
    RestResponse<List<PayChannelParamDTO>> findPayChannelParamByAppAndPlatform(
            @PathVariable("appId") String appId,
            @RequestParam("platformChannelCode") String platformChannelCode);

    /**
     * 根据应用的appId和平台服务类型编码以及原始支付渠道编码查询原始支付渠道参数配置数据
     * @param appId 应用的appId
     * @param platformChannelCode 平台服务类型编码
     * @param payChannel 原始支付渠道编码
     * @return
     */
    @PostMapping("${base_path.tran_serv}/find_pay_channel_param_by_app_and_platform_pay_channel/{appId}")
    RestResponse<PayChannelParamDTO> findPayChannelParamByAppAndPlatform(
            @PathVariable("appId") String appId,
            @RequestParam("platformChannelCode") String platformChannelCode,
            @RequestParam("payChannel") String payChannel);


    /**
     * 创建门店二维码接口
     */
    @PostMapping("${base_path.tran_order}/create_storeQRCode")
    RestResponse<String> createStoreQRCode(@RequestBody QRCodeDTO dto);
}
